package com.spzx.product.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.spzx.product.api.domain.ProductSku;
import com.spzx.product.api.domain.SkuPrice;
import com.spzx.product.api.domain.SkuQuery;
import com.spzx.product.api.domain.vo.SkuStockVo;
import com.spzx.product.api.domain.Product;
import com.spzx.product.api.domain.ProductDetails;

import java.util.List;
import java.util.Map;

public interface IProductService extends IService<Product> {
    /**
     * 分页查询
     *
     * @param product
     * @return
     */
    List<Product> selectList(Product product);

    /**
     * 新增商品
     *
     * @param product
     * @return
     */
    Integer insertProduct(Product product);

    /**
     * 查询商品详情
     *
     * @param id
     * @return
     */
    Product selectProductById(Long id);

    /**
     * 修改商品信息
     *
     * @param product
     * @return
     */
    Integer updateProduct(Product product);

    /**
     * 删除商品信息
     *
     * @param ids
     * @return
     */
    Integer deleteProductByIds(List<Long> ids);

    /**
     * 商品审核
     *
     * @param id
     * @param audiStatus
     * @return
     */
    void updateAudiStatus(Long id, Integer audiStatus);

    /**
     * 修改上下架状态
     *
     * @param id
     * @param status
     * @return
     */
    void updateStatus(Long id, Integer status);

    //===================给前端使用的=========================

    /**
     * 获取销量好的SKU
     * @return
     */
    List<ProductSku> getTopSale();

    /**
     * 商品列表查询
     * @param skuQuery
     * @return
     */
    List<ProductSku> selectProductSkuList(SkuQuery skuQuery);

    /**
     *获取商品sku
     * @param skuId
     * @return
     */
    ProductSku getProductSku(Long skuId);

    /**
     * 获取商品信息
     * @param id
     * @return
     */
    Product getProduct(Long id);

    /**
     * 获取商品sku最新价格信息
     * @param skuId
     * @return
     */
    SkuPrice getSkuPrice(Long skuId);

    /**
     * 获取商品详细信息
     * @param id
     * @return
     */
    ProductDetails getProductDetails(Long id);

    /**
     * 获取商品sku规则详细信息
     * @param id
     * @return
     */
    Map<String,Long> getSkuSpecValue(Long id);

    /**
     * 获取商品sku库存信息
     * @param skuId
     * @return
     */
    SkuStockVo getSkuStock(Long skuId);
}
